This is a notebook, updated after the degrees of freedom crisis of May 7-9, 2018, aimed at doing a first-pass analysis of all Beetles data to-date in the same notebook.
All 23 capacities
US Adults: MTurk pilot
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 3 factors: See 3-factor solution, above.
Clustering within reduced factor space

US Adults: not yet run
US Children: not yet run
GH Adults: not yet run
GH Children
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 2 factors:

Clustering within reduced factor space

TH Adults
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 4 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 4 factors: See 4-factor solution, above.
Minimizing BIC suggests retaining 2 factors:

Clustering within reduced factor space

TH Children
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 4 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 4 factors: See 4-factor solution, above.
Minimizing BIC suggests retaining 3 factors:

Clustering within reduced factor space

CH Adults: not yet run
CH Children: not yet run
VT Adults
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 3 factors: See 3-factor solution, above.
Clustering within reduced factor space

VT Children
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 2 factors:

Clustering within reduced factor space

Congruence across sites and age groups

Excluding “add and subtract numbers”
US Adults: MTurk pilot
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 3 factors: See 3-factor solution, above.
Clustering within reduced factor space

Attributions to characters
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

US Adults: not yet run
US Children: not yet run
GH Adults: not yet run
GH Children
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 2 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 2 factors: See 2-factor solution, above.
Minimizing BIC suggests retaining 2 factors: See 2-factor solution, above.
Clustering within reduced factor space

Attributions to characters
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

TH Adults
Maximal structure, oblimin rotation

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 2 factors:

Clustering within reduced factor space

Attributions to characters
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

TH Children
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 4 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 4 factors: See 4-factor solution, above.
Minimizing BIC suggests retaining 3 factors:

Clustering within reduced factor space

Attributions to characters
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

CH Adults: not yet run
CH Children: not yet run
VT Adults
Maximal structure, oblimin rotation
convergence not obtained in GPFoblq. 1000 iterations used. A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 2 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors:

Minimizing BIC suggests retaining 2 factors: See 2-factor solution, above.
Clustering within reduced factor space

Attributions to characters
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

VT Children
Maximal structure, oblimin rotation
A loading greater than abs(1) was detected. Examine the loadings carefully.

4 factors, oblimin rotation

Reduced structure, oblimin rotation
Following our usual protocol (eigenvalue > 1, shared variance explained > 5%, dominant for \(\geq\) 1 capacity after rotation) suggests retaining 3 factors:

Alternative factor retention methods
Parallel analysis suggests retaining 3 factors: See 3-factor solution, above.
Minimizing BIC suggests retaining 2 factors:

Clustering within reduced factor space

Attributions to characters
Joining, by = "subid"
Column `subid` joining character vector and factor, coercing into character vector

Congruence across sites and age groups

Master EFA

convergence not obtained in GPFoblq. 1000 iterations used.


Demographics
LS0tCnRpdGxlOiAiQmVldGxlcyBtZWdhLWFuYWx5c2lzIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKVGhpcyBpcyBhIG5vdGVib29rLCB1cGRhdGVkIGFmdGVyIHRoZSBkZWdyZWVzIG9mIGZyZWVkb20gY3Jpc2lzIG9mIE1heSA3LTksIDIwMTgsIGFpbWVkIGF0IGRvaW5nIGEgZmlyc3QtcGFzcyBhbmFseXNpcyBvZiBhbGwgQmVldGxlcyBkYXRhIHRvLWRhdGUgaW4gdGhlIHNhbWUgbm90ZWJvb2suCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZSA9IEZ9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUYsIHdhcm5pbmc9RiwgY2FjaGU9RiwgbWVzc2FnZT1GKQpgYGAKCmBgYHtyIGxpYnJhcmllcywgaW5jbHVkZSA9IEZ9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShybXMpCmxpYnJhcnkoZGVuZGV4dGVuZCkKYGBgCgpgYGB7ciBmdW5jdGlvbnMsIGluY2x1ZGUgPSBGfQojIyBtYWtlIGZ1bmN0aW9uIHRvIGNsZWFuIHVwIGtpZCBkYXRhIGZyb20gVVMKY2xlYW5fZnVuIDwtIGZ1bmN0aW9uKGRmLCBrZXksIGV4X2ZpbmFsMyA9IFRSVUUsIGV4X2FkZHN1YiA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgY2FwX2V4Y2x1ZGUgPSBOVUxMKSB7CiAgCiAgZGZfY2xlYW4gPC0gZGYgJT4lCiAgICBmdWxsX2pvaW4oa2V5KSAlPiUKICAgIGZpbHRlcighcXVlc3Rpb24gJWluJSBjYXBfZXhjbHVkZSwKICAgICAgICAgICAhaXMubmEoc3VibnVtKSwgIWlzLm5hKHF1ZXN0aW9uKSkgJT4lCiAgICBtdXRhdGUocmVzcG9uc2VOdW0gPSByZWNvZGUocmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtpbmQgb2YiID0gMC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZXMiID0gMSksCiAgICAgICAgICAgcmVzcG9uc2VOdW0gPSBhcy5udW1lcmljKHJlc3BvbnNlTnVtKSkgJT4lCiAgICByZW5hbWUoY2FwYWNpdHkgPSBxdWVzdGlvbikgJT4lCiAgICBkaXN0aW5jdChzdWJudW0sIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICAjIyBtdXRhdGUoY2FwYWNpdHkgPSByZWNvZGUoY2FwYWNpdHksCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZCBhbmQgc3VidHJhY3QgbnVtYmVycyIgPSAiYWRkaXRpb25fc3VidHJhY3Rpb24iLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG9vc2Ugd2hhdCB0byBkbyIgPSAiY2hvaWNlIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBndWlsdHkiID0gImd1aWx0IiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBoYXBweSIgPSAiaGFwcGluZXNzIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBsb3ZlIiA9ICJsb3ZlIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBwYWluIiA9ICJwYWluIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBwcm91ZCIgPSAicHJpZGUiLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNhZCIgPSAic2FkbmVzcyIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImZlZWwgc2NhcmVkIiA9ICJmZWFyIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBzaHkiID0gInNoeW5lc3MiLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNpY2ssIGxpa2Ugd2hlbiB5b3UgZmVlbCBsaWtlIHlvdSBtaWdodCB2b21pdCIgPSAibmF1c2VhIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCB0aXJlZCIgPSAiZmF0aWd1ZSIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5ncyIgPSAiZmlndXJpbmdfb3V0IiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGFuZ3J5IiA9ICJhbmdlciIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCBodW5ncnkiID0gImh1bmdlciIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCBodXJ0IGZlZWxpbmdzIiA9ICJodXJ0X2ZlZWxpbmdzIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhciB0aGluZ3MiID0gImhlYXJpbmciLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmF5IiA9ICJwcmF5ZXIiLAogICAgIyMgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1lbWJlciB0aGluZ3MiID0gIm1lbW9yeSIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNlIHRlbXBlcmF0dXJlcyIgPSAic2Vuc2luZ190ZW1wIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vuc2Ugd2hlbiB0aGluZ3MgYXJlIGZhciBhd2F5IiA9ICJzZW5zaW5nX2RlcHRoIiwKICAgICMjICAgICAgICAgICAgICAgICAgICAgICAgICAic21lbGwgdGhpbmdzIiA9ICJzbWVsbCIsCiAgICAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaW5rIGFib3V0IHRoaW5ncyIgPSAidGhvdWdodCIpKSAlPiUKICAgIHNwcmVhZChjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogICAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgICBjb2x1bW5fdG9fcm93bmFtZXMoInN1Ym51bSIpCiAgCiAgaWYoZXhfZmluYWwzKSB7CiAgICBkZl9jbGVhbiA8LSBkZl9jbGVhbiAlPiUgCiAgICAgIHNlbGVjdCgtYyhgYmxlZWQgaWYgdGhleSB0b3VjaCBzb21ldGhpbmcgc2hhcnBgLAogICAgICAgICAgICAgICAgYGhhdmUgbWluZHNgLCBgaGF2ZSBzb3Vsc2ApKQogIH0KCiAgaWYoZXhfYWRkc3ViKSB7CiAgICBkZl9jbGVhbiA8LSBkZl9jbGVhbiAlPiUgCiAgICAgIHNlbGVjdCgtYyhgYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzYCkpCiAgfQogIAogIHJldHVybihkZl9jbGVhbikKICAKfQoKIyMgbWFrZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgbWF4IG5fZmFjdG9ycywgZ2l2ZW4gbl9vYnMgdmFyaWFibGVzCm1heF9mYWN0X2Z1biA8LSBmdW5jdGlvbihwKSB7CiAgCiAgc19tb21lbnRzIDwtIGZ1bmN0aW9uKHApIHtwKihwKzEpLzJ9CiAgcGFyYW1fZXN0IDwtIGZ1bmN0aW9uKHAsIGspIHtwKmsgKyBwIC0gKGsqKGstMSkvMil9CiAgY2hlY2tfb2sgPC0gZnVuY3Rpb24ocCwgaykgewogICAgYSA8LSAocC1rKV4yCiAgICBiIDwtIHArawogICAgcmV0dXJuKGlmZWxzZShhPmIsIFRSVUUsIEZBTFNFKSkKICB9CiAgCiAgZGZfY2hlY2sgPC0gZGF0YS5mcmFtZSgpCiAgZm9yKGkgaW4gMTpwKXsKICAgIGRmX2NoZWNrW2ksImNoZWNrIl0gPC0gY2hlY2tfb2socCxpKQogIH0KICAKICBtYXggPC0gZGZfY2hlY2sgJT4lIGZpbHRlcihjaGVjaykgJT4lIG5yb3coKQogIHJldHVybihtYXgpCiAgCn0KCiMjIG1ha2UgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGZhY3RvciByZXRlbnRpb24gY3JpdGVyaWEKcmV0ZW5fZmFjdF9mdW4gPC0gZnVuY3Rpb24oZGYsIHJvdCkgewogIAogIG1heF9lZmEgPC0gZmEoZGYsIG5mYWN0b3JzID0gbWF4X2ZhY3RfZnVuKG5jb2woZGYpKSwgcm90YXRlID0gIm5vbmUiKQogIG1heF92YWNjIDwtIG1heF9lZmEkVmFjY291bnRlZCAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3RhdCIpICU+JQogICAgZ2F0aGVyKGZhY3RvciwgdmFsdWUsIC1zdGF0KSAlPiUKICAgIHNwcmVhZChzdGF0LCB2YWx1ZSkgJT4lCiAgICBmaWx0ZXIoYFNTIGxvYWRpbmdzYCA+IDEsIGBQcm9wb3J0aW9uIEV4cGxhaW5lZGAgPiAwLjA1KQogIG5fcmV0ZW4xIDwtIG5yb3cobWF4X3ZhY2MpCiAgCiAgcmV0ZW5fZWZhIDwtIGZhKGRmLCBuZmFjdG9ycyA9IG5fcmV0ZW4xLCByb3RhdGUgPSByb3QpCiAgcmV0ZW5fbG9hZGluZ3MgPC0gcmV0ZW5fZWZhJGxvYWRpbmdzW10gJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIm1jIikgJT4lCiAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtbWMpICU+JQogICAgZ3JvdXBfYnkobWMpICU+JQogICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgIHVuZ3JvdXAoKQogIG5fcmV0ZW4yIDwtIHJldGVuX2xvYWRpbmdzICU+JQogICAgY291bnQoZmFjdG9yKSAlPiUKICAgIG5yb3coKQogICAgCiAgcmV0dXJuKG5fcmV0ZW4yKQoKfQoKIyMgbWFrZSBmdW5jdGlvbiB0byBwbG90IGhlYXRtYXAgb2YgZmFjdG9yIGxvYWRpbmdzCmhlYXRtYXBfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuX2ZhY3RvcnMsIHJvdCl7CiAgCiAgZWZhIDwtIGZhKGRmLCBuZmFjdG9ycyA9IG5fZmFjdG9ycywgcm90YXRlID0gcm90KQogIGxvYWRpbmdzIDwtIGVmYSRsb2FkaW5nc1tdICU+JQogICAgZmEuc29ydCgpICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJtYyIpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJvcmRlciIpICU+JQogICAgbXV0YXRlKG9yZGVyID0gYXMubnVtZXJpYyhvcmRlcikpICU+JQogICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWMobWMsIG9yZGVyKSkKICAKICBwbG90IDwtIGdncGxvdChsb2FkaW5ncywKICAgICAgICAgICAgICAgICBhZXMoeCA9IGZhY3RvciwgeSA9IHJlb3JkZXIobWMsIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpKSArCiAgICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgICBnZW9tX3RleHQoc2l6ZSA9IDMpICsKICAgIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIobGltaXRzID0gYygtMSwgMSksIHBhbGV0dGUgPSAiUmRZbEJ1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMTUpKSArCiAgICB0aGVtZV9taW5pbWFsKCkKICAKICByZXR1cm4ocGxvdCkKICAKfQoKIyMgbWFrZSBmdW5jdGlvbiB0byBwbG90IGNsdXN0ZXJpbmcgb2YgbWF4aW1hbCBmYWN0b3IgbG9hZGluZ3MKY2x1c3Rlcl9mdW4gPC0gZnVuY3Rpb24oZGYsIG5fZmFjdG9ycywgcm90KXsKICAKICBjbHVzdCA8LSBmYShkZiwgbl9mYWN0b3JzLCByb3QpJGxvYWRpbmdzW10gJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICBkaXN0KCkgJT4lCiAgICBoY2x1c3QoKQogIAogIHAgPC0gY2x1c3QgJT4lCiAgICBhcy5kZW5kcm9ncmFtKCkgJT4lCiAgICBzZXQoImxhYmVsc19jb2wiLCB2YWx1ZSA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICAgICAgIGsgPSA2KSAlPiUKICAgIHNldCgiYnJhbmNoZXNfbHdkIiwgMC41KSAlPiUKICAgIGFzLmdnZGVuZCgpICU+JQogICAgZ2dwbG90KGhvcml6ID0gRikgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoLTMsIG1heChjbHVzdCRoZWlnaHQpKSkKICAKICByZXR1cm4ocCkKICAKfQoKIyMgbWFrZSBmdW5jdGlvbiB0byBwbG90IGNvbmdydWVuY2UgYWNyb3NzIHNhbXBsZXMKbG9hZGluZ3NfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuX2ZhY3RvcnMgPSByZXRlbl9mYWN0X2Z1bihkZiwgIm9ibGltaW4iKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICByb3QgPSAib2JsaW1pbiIsIGxhYmVsKXsKICBkX2VmYSA8LSBmYShkZiwgbl9mYWN0b3JzLCByb3QpJGxvYWRpbmdzW10gJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgICBhcnJhbmdlKGNhcGFjaXR5KSAlPiUKICAgIGNvbHVtbl90b19yb3duYW1lcygiY2FwYWNpdHkiKQogIGNvbG5hbWVzKGRfZWZhKSA8LSBnc3ViKCJNUiIsIHBhc3RlKGxhYmVsLCAiTVIiLCBzZXAgPSAiXyIpLCBjb2xuYW1lcyhkX2VmYSkpCiAgcmV0dXJuKGRfZWZhKQp9CmBgYAoKYGBge3Iga2V5LCBpbmNsdWRlID0gRn0KcXVlc3Rpb25fa2V5IDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RFVkVMT1BNRU5UQUwgVEFTS1MvYmVldGxlczpkaW1raWQ6ZmFjdG9ycy9kZXNpZ24vYmVldGxlcyBjYi5jc3YiKQpgYGAKCiMgQWxsIDIzIGNhcGFjaXRpZXMKCmBgYHtyLCBpbmNsdWRlID0gRiwgd2FybmluZyA9IEZBTFNFfQojIFVTIGFkdWx0cyBQSUxPVApkX3VzX2FkX3BpbG90XzIzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RFVkVMT1BNRU5UQUwgVEFTS1MvYmVldGxlczpkaW1raWQ6ZmFjdG9ycy9hbmFseXNpcy9fVVMgcGlsb3QvYmVldGxlc19waWxvdDJfdGlkeS5jc3YiKSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImJlZXRsZXMiKSAlPiUKICBkaXN0aW5jdChzdWJpZCwgcXVlc3Rpb24sIHJlc3BvbnNlKSAlPiUKICBmaWx0ZXIoIXF1ZXN0aW9uICVpbiUgYygiYmxlZWQiLCAibWluZCIsICJzb3VsIikpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IHJlY29kZShxdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkZF9zdWJ0cmFjdCIgPSAiYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZ3J5IiA9ICJnZXQgYW5ncnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAjICJibGVlZCIgPSAiYmxlZWQgd2hlbiB0aGV5IHRvdWNoIHNvbWV0aGluZyBzaGFycCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaG9vc2UiID0gImNob29zZSB3aGF0IHRvIGRvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZ3VyZV9vdXQiID0gImZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJndWlsdHkiID0gImZlZWwgZ3VpbHR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhcHB5IiA9ICJmZWVsIGhhcHB5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYXIiID0gImhlYXIgdGhpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImh1bmdyeSIgPSAiZ2V0IGh1bmdyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJodXJ0X2ZlZWxpbmdzIiA9ICJnZXQgaHVydCBmZWVsaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb3ZlIiA9ICJmZWVsIGxvdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAjICJtaW5kIiA9ICJoYXZlIG1pbmRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhaW4iID0gImZlZWwgcGFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmF5IiA9ICJwcmF5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm91ZCIgPSAiZmVlbCBwcm91ZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1lbWJlciIgPSAicmVtZW1iZXIgdGhpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhZCIgPSAiZmVlbCBzYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2NhcmVkIiA9ICJmZWVsIHNjYXJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zZV9mYXIiID0gInNlbnNlIHdoZW4gdGhpbmdzIGFyZSBmYXIgYXdheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zZV90ZW1wIiA9ICJzZW5zZSB0ZW1wZXJhdHVyZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2h5IiA9ICJmZWVsIHNoeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWNrIiA9ICJmZWVsIHNpY2ssIGxpa2Ugd2hlbiB5b3UgZmVlbCBsaWtlIHlvdSBtaWdodCB2b21pdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbWVsbCIgPSAic21lbGwgdGhpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAic291bCIgPSAiaGF2ZSBzb3VscyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGluayIgPSAidGhpbmsgYWJvdXQgdGhpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpcmVkIiA9ICJmZWVsIHRpcmVkIikpICU+JQogIHNwcmVhZChxdWVzdGlvbiwgcmVzcG9uc2UpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRiwgd2FybmluZyA9IEZBTFNFfQojIyBVUyBhZHVsdHM6IE5PVCBZRVQgUlVOCiMjIFVTIGNoaWxkcmVuOiBOT1QgWUVUIFJVTgoKIyMgR0ggYWR1bHRzOiBOT1QgWUVUIFJVTgojIyBHSCBjaGlsZHJlbgpkX2doX2NoXzIzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX0dIQU5BL2JlZXRsZXNfZ2hhbmFfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5KQoKIyMgQ0ggYWR1bHRzOiBOT1QgWUVUIFJVTgojIyBDSCBjaGlsZHJlbjogTk9UIFlFVCBSVU4KCiMjIFRIIGFkdWx0cwpkX3RoX2FkXzIzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgY2xlYW5fZnVuKGtleSA9IHF1ZXN0aW9uX2tleSkKIyMgVEggY2hpbGRyZW4KZF90aF9jaF8yMyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9USEFJTEFORC9iZWV0bGVzX3RoYWlsYW5kX2NoaWxkcmVuX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgY2xlYW5fZnVuKGtleSA9IHF1ZXN0aW9uX2tleSkKCiMjIFZUIGFkdWx0cwpkX3Z0X2FkXzIzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1ZBTlVBVFUvYmVldGxlc192YW51YXR1X2FkdWx0c190aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGNsZWFuX2Z1bihrZXkgPSBxdWVzdGlvbl9rZXkpCiMjIFZUIGNoaWxkcmVuCmRfdnRfY2hfMjMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5KQpgYGAKCiMjIFVTIEFkdWx0czogTVR1cmsgcGlsb3QKCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAwLjV9CmhlYXRtYXBfZnVuKGRfdXNfYWRfcGlsb3RfMjMsIG1heF9mYWN0X2Z1bihuY29sKGRfdXNfYWRfcGlsb3RfMjMpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF91c19hZF9waWxvdF8yMywgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBVUyBBZHVsdHMgKE1UdXJrIFBpbG90KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfdXNfYWRfcGlsb3RfMjMsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdXNfYWRfcGlsb3RfMjMsIHJldGVuX2ZhY3RfZnVuKGRfdXNfYWRfcGlsb3RfMjMsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF91c19hZF9waWxvdF8yM19wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3VzX2FkX3BpbG90XzIzKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3VzX2FkX3BpbG90XzIzX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgMy1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3VzX2FkX3BpbG90XzIzX2JpYyA8LSBWU1MoZF91c19hZF9waWxvdF8yMywgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdXNfYWRfcGlsb3RfMjMpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF91c19hZF9waWxvdF8yM19iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF91c19hZF9waWxvdF8yMywgcmV0ZW5fZmFjdF9mdW4oZF91c19hZF9waWxvdF8yMywgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMgVVMgQWR1bHRzOiBub3QgeWV0IHJ1bgoKIyMgVVMgQ2hpbGRyZW46IG5vdCB5ZXQgcnVuCgojIyBHSCBBZHVsdHM6IG5vdCB5ZXQgcnVuCgojIyBHSCBDaGlsZHJlbgoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KaGVhdG1hcF9mdW4oZF9naF9jaF8yMywgbWF4X2ZhY3RfZnVuKG5jb2woZF9naF9jaF8yMykpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogR0ggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX2doX2NoXzIzLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfZ2hfY2hfMjMsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfZ2hfY2hfMjMsIHJldGVuX2ZhY3RfZnVuKGRfZ2hfY2hfMjMsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9naF9jaF8yM19wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX2doX2NoXzIzKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX2doX2NoXzIzX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgMy1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX2doX2NoXzIzX2JpYyA8LSBWU1MoZF9naF9jaF8yMywgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfZ2hfY2hfMjMpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF9naF9jaF8yM19iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfZ2hfY2hfMjMsIDIsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtaW5pbWl6aW5nIEJJQzogR0ggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfZ2hfY2hfMjMsIHJldGVuX2ZhY3RfZnVuKGRfZ2hfY2hfMjMsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIFRIIEFkdWx0cwoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KaGVhdG1hcF9mdW4oZF90aF9hZF8yMywgbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9hZF8yMykpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVEggQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF90aF9hZF8yMywgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX3RoX2FkXzIzLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3RoX2FkXzIzLCByZXRlbl9mYWN0X2Z1bihkX3RoX2FkXzIzLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3RoX2FkXzIzX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdGhfYWRfMjMpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdGhfYWRfMjNfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSA0LWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdGhfYWRfMjNfYmljIDwtIFZTUyhkX3RoX2FkXzIzLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9hZF8yMykpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3RoX2FkXzIzX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9hZF8yMywgMiwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIENsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmNsdXN0ZXJfZnVuKGRfdGhfYWRfMjMsIHJldGVuX2ZhY3RfZnVuKGRfdGhfYWRfMjMsICJvYmxpbWluIiksIHJvdCA9ICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgd2l0aGluIHJlZHVjZWQgZmFjdG9yIHNwYWNlOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyBUSCBDaGlsZHJlbgoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMywgbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9jaF8yMykpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3RoX2NoXzIzLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF90aF9jaF8yMywgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMywgcmV0ZW5fZmFjdF9mdW4oZF90aF9jaF8yMywgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3RoX2NoXzIzX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdGhfY2hfMjMpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdGhfY2hfMjNfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSA0LWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdGhfY2hfMjNfYmljIDwtIFZTUyhkX3RoX2NoXzIzLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9jaF8yMykpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3RoX2NoXzIzX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMywgMywgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF90aF9jaF8yMywgcmV0ZW5fZmFjdF9mdW4oZF90aF9jaF8yMywgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMgQ0ggQWR1bHRzOiBub3QgeWV0IHJ1bgoKIyMgQ0ggQ2hpbGRyZW46IG5vdCB5ZXQgcnVuCgojIyBWVCBBZHVsdHMKCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAwLjV9CmhlYXRtYXBfZnVuKGRfdnRfYWRfMjMsIG1heF9mYWN0X2Z1bihuY29sKGRfdnRfYWRfMjMpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdnRfYWRfMjMsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF92dF9hZF8yMywgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF92dF9hZF8yMywgcmV0ZW5fZmFjdF9mdW4oZF92dF9hZF8yMywgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF92dF9hZF8yM19wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX3Z0X2FkXzIzKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3Z0X2FkXzIzX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgMy1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3Z0X2FkXzIzX2JpYyA8LSBWU1MoZF92dF9hZF8yMywgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfdnRfYWRfMjMpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF92dF9hZF8yM19iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF92dF9hZF8yMywgcmV0ZW5fZmFjdF9mdW4oZF92dF9hZF8yMywgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIFZUIENoaWxkcmVuCgojIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIzLCBtYXhfZmFjdF9mdW4obmNvbChkX3Z0X2NoXzIzKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdnRfY2hfMjMsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX3Z0X2NoXzIzLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIzLCByZXRlbl9mYWN0X2Z1bihkX3Z0X2NoXzIzLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdnRfY2hfMjNfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF92dF9jaF8yMykKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF92dF9jaF8yM19wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF92dF9jaF8yM19iaWMgPC0gVlNTKGRfdnRfY2hfMjMsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3Z0X2NoXzIzKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdnRfY2hfMjNfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIzLCAyLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWluaW1pemluZyBCSUM6IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3Z0X2NoXzIzLCByZXRlbl9mYWN0X2Z1bihkX3Z0X2NoXzIzLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyBDb25ncnVlbmNlIGFjcm9zcyBzaXRlcyBhbmQgYWdlIGdyb3VwcwoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxfQpjb25nMjMgPC0gZmEuY29uZ3J1ZW5jZShsaXN0KAogIGxvYWRpbmdzX2Z1bihkX3VzX2FkX3BpbG90XzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ1c19hZCIpLAogIGxvYWRpbmdzX2Z1bihkX2doX2NoXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJnaF9jaCIpLAogIGxvYWRpbmdzX2Z1bihkX3RoX2FkXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ0aF9hZCIpLAogIGxvYWRpbmdzX2Z1bihkX3RoX2NoXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ0aF9jaCIpLAogIGxvYWRpbmdzX2Z1bihkX3Z0X2FkXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ2dF9hZCIpLAogIGxvYWRpbmdzX2Z1bihkX3Z0X2NoXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ2dF9jaCIpKSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiZmFjdG9yQSIpICU+JQogIGdhdGhlcihmYWN0b3JCLCBjb25ncnVlbmNlLCAtZmFjdG9yQSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoImZhY3RvciIpKSwKICAgICAgICAgICAgZnVucyhmYWN0b3IoLiwgbGV2ZWxzID0gYygidXNfYWRfTVIxIiwgInVzX2FkX01SMiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c19hZF9NUjMiLCAidXNfYWRfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2hfY2hfTVIxIiwgImdoX2NoX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdoX2NoX01SMyIsICJnaF9jaF9NUjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aF9hZF9NUjEiLCAidGhfYWRfTVIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhfYWRfTVIzIiwgInRoX2FkX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoX2NoX01SMSIsICJ0aF9jaF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aF9jaF9NUjMiLCAidGhfY2hfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidnRfYWRfTVIxIiwgInZ0X2FkX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZ0X2FkX01SMyIsICJ2dF9hZF9NUjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2dF9jaF9NUjEiLCAidnRfY2hfTVIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidnRfY2hfTVIzIiwgInZ0X2NoX01SNCIpKSkpCgpnZ3Bsb3QoY29uZzIzLCBhZXMoeCA9IGZhY3RvckEsIHkgPSBmYWN0b3JCLAogICAgICAgICAgIGZpbGwgPSBjb25ncnVlbmNlLCBsYWJlbCA9IHJvdW5kKGNvbmdydWVuY2UsIDIpKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3RleHQoc2l6ZSA9IDIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSA0LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSA4LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMi41LCBsdHkgPSAyLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMTYuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDIwLjUsIGx0eSA9IDIsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAyNC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gNC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gOC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMTIuNSwgbHR5ID0gMiwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDE2LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAyMC41LCBsdHkgPSAyLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMjQuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRHeSIsIGxpbWl0cyA9IGMoLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMzApKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSkgKwogIGxhYnModGl0bGUgPSAiQ29uZ3J1ZW5jZSBiZXR3ZWVuIDQtZmFjdG9yIHNvbHV0aW9ucyBhY3Jvc3Mgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjcsIGluY2x1ZGUgPSBGfQpsb2FkaW5nc18yMyA8LSBkYXRhLmZyYW1lKAogIGxvYWRpbmdzX2Z1bihkX3VzX2FkX3BpbG90XzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ1c19hZCIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKGRfZ2hfY2hfMjMsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gImdoX2NoIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4oZF90aF9hZF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfYWQiKSwKICAgICAgICAgIGxvYWRpbmdzX2Z1bihkX3RoX2NoXzIzLCBuX2ZhY3RvcnMgPSA0LCBsYWJlbCA9ICJ0aF9jaCIpLAogICAgICAgICAgbG9hZGluZ3NfZnVuKGRfdnRfYWRfMjMsIG5fZmFjdG9ycyA9IDQsIGxhYmVsID0gInZ0X2FkIiksCiAgICAgICAgICBsb2FkaW5nc19mdW4oZF92dF9jaF8yMywgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfY2giKSkgJT4lCiAgcmVuYW1lKCJ1c19hZF9CT0RZIiA9IHVzX2FkX01SMSwgInVzX2FkX0hFQVJUIiA9IHVzX2FkX01SMiwKICAgICAgICAgInVzX2FkX01JTkQiID0gdXNfYWRfTVIzLCAidXNfYWRfYW5nZXIiID0gdXNfYWRfTVI0LAogICAgICAgICAiZ2hfY2hfQk9EWUhFQVJUIiA9IGdoX2NoX01SMSwgImdoX2NoX01JTkRIRUFSVCIgPSBnaF9jaF9NUjIsCiAgICAgICAgICJnaF9jaF9hZGRzdWJ0cmFjdCIgPSBnaF9jaF9NUjMsICJnaF9jaF9ub25lIiA9IGdoX2NoX01SNCwKICAgICAgICAgInRoX2FkX0hFQVJUIiA9IHRoX2FkX01SMSwgInRoX2FkX0JPRFkxIiA9IHRoX2FkX01SMiwKICAgICAgICAgInRoX2FkX01JTkQiID0gdGhfYWRfTVIzLCAidGhfYWRfQk9EWTIiID0gdGhfYWRfTVI0LAogICAgICAgICAidGhfY2hfQk9EWSIgPSB0aF9jaF9NUjEsICJ0aF9jaF9NSU5EIiA9IHRoX2NoX01SMiwKICAgICAgICAgInRoX2NoX0hFQVJUMSIgPSB0aF9jaF9NUjMsICJ0aF9jaF9IRUFSVDIiID0gdGhfY2hfTVI0LAogICAgICAgICAidnRfYWRfQk9EWSIgPSB2dF9hZF9NUjEsICJ2dF9hZF9IRUFSVCIgPSB2dF9hZF9NUjIsCiAgICAgICAgICJ2dF9hZF9NSU5EMSIgPSB2dF9hZF9NUjMsICJ2dF9hZF9NSU5EMiIgPSB2dF9hZF9NUjQsCiAgICAgICAgICJ2dF9jaF9CT0RZIiA9IHZ0X2NoX01SMSwgInZ0X2NoX01JTkQiID0gdnRfY2hfTVIyLAogICAgICAgICAidnRfY2hfSEVBUlQiID0gdnRfY2hfTVIzLCAidnRfY2hfbm9uZSIgPSB2dF9jaF9NUjQpCgojIGRvIGNsdXN0ZXIgYW5hbHlzaXMgb24gZmFjdG9yIGxvYWRpbmdzCmxvYWRpbmdzXzIzICU+JQogIHQoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCAiI2ZmZmY5OSIsICIjYjE1OTI4IiksCiAgICAgIGsgPSA2KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0yLCAzKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgb2YgZmFjdG9yczogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKCiMgZG8gZmFjdG9yIGFuYWx5c2lzIG9uIGZhY3RvciBsb2FkaW5ncwpoZWF0bWFwX2Z1bihsb2FkaW5nc18yMywgcmV0ZW5fZmFjdF9mdW4obG9hZGluZ3NfMjMsICJvYmxpbWluIiksICJvYmxpbWluIikKIyBmYS5wYXJhbGxlbChsb2FkaW5nc18yMykKaGVhdG1hcF9mdW4obG9hZGluZ3NfMjMsIDMsICJvYmxpbWluIikKCiMgZG8gY2x1c3RlciBhbmFseXNpcyBvbiBmYWN0b3IgbG9hZGluZ3MgYWZ0ZXIgZmFjdG9yIGFuYWx5c2lzCmZhKGxvYWRpbmdzXzIzLCByZXRlbl9mYWN0X2Z1bihsb2FkaW5nc18yMywgIm9ibGltaW4iKSwgIm9ibGltaW4iKSRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiLCAiI2ZmZmY5OSIsICIjYjE1OTI4IiksCiAgICAgIGsgPSA2KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0yLCAyKSkgKwogIGxhYnModGl0bGUgPSAiSGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgb2YgZmFjdG9yczogQWxsIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCAyMyBjYXBhY2l0aWVzOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyBNYXN0ZXIgRUZBCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmRfYWxsXzIzIDwtIGRfdXNfYWRfcGlsb3RfMjMgJT4lCiAgYmluZF9yb3dzKGRfZ2hfY2hfMjMpICU+JQogIGJpbmRfcm93cyhkX3RoX2FkXzIzKSAlPiUKICBiaW5kX3Jvd3MoZF90aF9jaF8yMykgJT4lCiAgYmluZF9yb3dzKGRfdnRfYWRfMjMpICU+JQogIGJpbmRfcm93cyhkX3Z0X2NoXzIzKQoKaGVhdG1hcF9mdW4oZF9hbGxfMjMsIHJldGVuX2ZhY3RfZnVuKGRfYWxsXzIzLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKCiMgZmEucGFyYWxsZWwoZF9hbGxfMjMpCgpoZWF0bWFwX2Z1bihkX2FsbF8yMywgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIHBhcmFsbGVsIGFuYWx5c2lzICYgbWluaW1pemluZyBCSUM6IEFsbCBzYW1wbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgMjMgY2FwYWNpdGllczsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQoKIyBWU1MoZF9hbGxfMjMpCgpoZWF0bWFwX2Z1bihkX2FsbF8yMywgMywgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDMtZmFjdG9yIHNvbHV0aW9uOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIDIzIGNhcGFjaXRpZXM7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgoKIyBFeGNsdWRpbmcgImFkZCBhbmQgc3VidHJhY3QgbnVtYmVycyIKCmBgYHtyLCBpbmNsdWRlID0gRiwgd2FybmluZyA9IEZBTFNFfQpkX3VzX2FkX3BpbG90XzIyIDwtIGRfdXNfYWRfcGlsb3RfMjMgJT4lIHNlbGVjdCgtYGFkZCBhbmQgc3VidHJhY3QgbnVtYmVyc2ApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGLCB3YXJuaW5nID0gRkFMU0V9CiMjIFVTIGFkdWx0czogTk9UIFlFVCBSVU4KIyMgVVMgY2hpbGRyZW46IE5PVCBZRVQgUlVOCgojIyBHSCBhZHVsdHM6IE5PVCBZRVQgUlVOCiMjIEdIIGNoaWxkcmVuCmRfZ2hfY2hfMjIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfR0hBTkEvYmVldGxlc19naGFuYV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGNsZWFuX2Z1bihrZXkgPSBxdWVzdGlvbl9rZXksIGV4X2FkZHN1YiA9IFRSVUUpCgojIyBDSCBhZHVsdHM6IE5PVCBZRVQgUlVOCiMjIENIIGNoaWxkcmVuOiBOT1QgWUVUIFJVTgoKIyMgVEggYWR1bHRzCmRfdGhfYWRfMjIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVEhBSUxBTkQvYmVldGxlc190aGFpbGFuZF9hZHVsdHNfdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5LCBleF9hZGRzdWIgPSBUUlVFKQojIyBUSCBjaGlsZHJlbgpkX3RoX2NoXzIyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfY2hpbGRyZW5fdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBjbGVhbl9mdW4oa2V5ID0gcXVlc3Rpb25fa2V5LCBleF9hZGRzdWIgPSBUUlVFKQoKIyMgVlQgYWR1bHRzCmRfdnRfYWRfMjIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVkFOVUFUVS9iZWV0bGVzX3ZhbnVhdHVfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgY2xlYW5fZnVuKGtleSA9IHF1ZXN0aW9uX2tleSwgZXhfYWRkc3ViID0gVFJVRSkKIyMgVlQgY2hpbGRyZW4KZF92dF9jaF8yMiA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9WQU5VQVRVL2JlZXRsZXNfdmFudWF0dV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGNsZWFuX2Z1bihrZXkgPSBxdWVzdGlvbl9rZXksIGV4X2FkZHN1YiA9IFRSVUUpCmBgYAoKIyMgVVMgQWR1bHRzOiBNVHVyayBwaWxvdAoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KaGVhdG1hcF9mdW4oZF91c19hZF9waWxvdF8yMiwgbWF4X2ZhY3RfZnVuKG5jb2woZF91c19hZF9waWxvdF8yMikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3VzX2FkX3BpbG90XzIyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFVTIEFkdWx0cyAoTVR1cmsgUGlsb3QpIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF91c19hZF9waWxvdF8yMiwgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF91c19hZF9waWxvdF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF91c19hZF9waWxvdF8yMiwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3VzX2FkX3BpbG90XzIyX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdXNfYWRfcGlsb3RfMjIpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdXNfYWRfcGlsb3RfMjJfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSAzLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdXNfYWRfcGlsb3RfMjJfYmljIDwtIFZTUyhkX3VzX2FkX3BpbG90XzIyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF91c19hZF9waWxvdF8yMikpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3VzX2FkX3BpbG90XzIyX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3VzX2FkX3BpbG90XzIyLCByZXRlbl9mYWN0X2Z1bihkX3VzX2FkX3BpbG90XzIyLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVVMgQWR1bHRzIChNVHVyayBQaWxvdCkiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX3VzX2FkX3BpbG90XzIyLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RFVkVMT1BNRU5UQUwgVEFTS1MvYmVldGxlczpkaW1raWQ6ZmFjdG9ycy9hbmFseXNpcy9fVVMgcGlsb3QvYmVldGxlc19waWxvdDJfdGlkeS5jc3YiKSAlPiUKICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImJlZXRsZXMiKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBVUyBBZHVsdHMgKE1UdXJrIFBpbG90KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKCiMjIFVTIEFkdWx0czogbm90IHlldCBydW4KCiMjIFVTIENoaWxkcmVuOiBub3QgeWV0IHJ1bgoKIyMgR0ggQWR1bHRzOiBub3QgeWV0IHJ1bgoKIyMgR0ggQ2hpbGRyZW4KCiMjIyBNYXhpbWFsIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDcsIGZpZy5hc3AgPSAwLjV9CmhlYXRtYXBfZnVuKGRfZ2hfY2hfMjIsIG1heF9mYWN0X2Z1bihuY29sKGRfZ2hfY2hfMjIpKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1heGltYWwgc29sdXRpb246IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF9naF9jaF8yMiwgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBHSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfZ2hfY2hfMjIsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfZ2hfY2hfMjIsIHJldGVuX2ZhY3RfZnVuKGRfZ2hfY2hfMjIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBBbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHMKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9naF9jaF8yMl9wYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChkX2doX2NoXzIyKQpgYGAKClBhcmFsbGVsIGFuYWx5c2lzIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX2doX2NoXzIyX3BhcmFsbGVsJG5mYWN0YCBmYWN0b3JzOiBTZWUgMi1mYWN0b3Igc29sdXRpb24sIGFib3ZlLgoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX2doX2NoXzIyX2JpYyA8LSBWU1MoZF9naF9jaF8yMiwgbiA9IG1heF9mYWN0X2Z1bihuY29sKGRfZ2hfY2hfMjIpKSwgcm90YXRlID0gIm9ibGltaW4iLCBwbG90ID0gRikKYGBgCgpNaW5pbWl6aW5nIEJJQyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF9naF9jaF8yMl9iaWMkdnNzLnN0YXRzICU+JSByb3duYW1lc190b19jb2x1bW4oIm5mYWN0IikgJT4lIGZpbHRlcihCSUMgPT0gbWluKEJJQykpICU+JSBzZWxlY3QobmZhY3QpICU+JSBhcy5udW1lcmljKClgIGZhY3RvcnM6IFNlZSAyLWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF9naF9jaF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF9naF9jaF8yMiwgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZmEoZF9naF9jaF8yMiwgNCwgIm9ibGltaW4iKSRzY29yZXNbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJnaGFuYSIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLXN1YmlkKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfR0hBTkEvYmVldGxlc19naGFuYV9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpKSAlPiUKICBncm91cF9ieShjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjZWxsIHBob25lcyIsICJyb2NrcyIsICJmbG93ZXJzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGVzIiwgImNoaWNrZW5zIiwgIm1pY2UiLCAiZG9ncyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iLCAicGlncyIsICJnaG9zdHMiLCAiR29kIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjaGFyYWN0ZXIsIHkgPSBNZWFuLCB5bWluID0gTG93ZXIsIHltYXggPSBVcHBlciwgCiAgICAgICAgICAgICBjb2xvciA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKH4gZmFjdG9yKSArCiAgZ2VvbV9wb2ludHJhbmdlKCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbChndWlkZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjY2FiMmQ2IiwgIiM2YTNkOWEiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcywgNC1mYWN0b3Igc29sdXRpb246IEdIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiRmFjdG9yIHNjb3JlIikKYGBgCgoKIyMgVEggQWR1bHRzCgojIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3RoX2FkXzIyLCBtYXhfZmFjdF9mdW4obmNvbChkX3RoX2FkXzIyKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3RoX2FkXzIyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFRIIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgUmVkdWNlZCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCkZvbGxvd2luZyBvdXIgdXN1YWwgcHJvdG9jb2wgKGVpZ2VudmFsdWUgPiAxLCBzaGFyZWQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUsIGRvbWluYW50IGZvciAkXGdlcSQgMSBjYXBhY2l0eSBhZnRlciByb3RhdGlvbikgc3VnZ2VzdHMgcmV0YWluaW5nIGByIHJldGVuX2ZhY3RfZnVuKGRfdGhfYWRfMjIsICJvYmxpbWluIilgIGZhY3RvcnM6CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmhlYXRtYXBfZnVuKGRfdGhfYWRfMjIsIHJldGVuX2ZhY3RfZnVuKGRfdGhfYWRfMjIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IFRIIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdGhfYWRfMjJfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF90aF9hZF8yMikKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF90aF9hZF8yMl9wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF90aF9hZF8yMl9iaWMgPC0gVlNTKGRfdGhfYWRfMjIsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3RoX2FkXzIyKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdGhfYWRfMjJfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3RoX2FkXzIyLCAyLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWluaW1pemluZyBCSUM6IFRIIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF90aF9hZF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF90aF9hZF8yMiwgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFRIIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIyBBdHRyaWJ1dGlvbnMgdG8gY2hhcmFjdGVycwoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjl9CmZhKGRfdGhfYWRfMjIsIDQsICJvYmxpbWluIikkc2NvcmVzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZSgidGhhaWxhbmQiLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1RIQUlMQU5EL2JlZXRsZXNfdGhhaWxhbmRfYWR1bHRzX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBUSCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICJGYWN0b3Igc2NvcmUiKQpgYGAKCgojIyBUSCBDaGlsZHJlbgoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMiwgbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9jaF8yMikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIDQgZmFjdG9ycywgb2JsaW1pbiByb3RhdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpoZWF0bWFwX2Z1bihkX3RoX2NoXzIyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgNC1mYWN0b3Igc29sdXRpb246IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBSZWR1Y2VkIHN0cnVjdHVyZSwgb2JsaW1pbiByb3RhdGlvbgoKRm9sbG93aW5nIG91ciB1c3VhbCBwcm90b2NvbCAoZWlnZW52YWx1ZSA+IDEsIHNoYXJlZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JSwgZG9taW5hbnQgZm9yICRcZ2VxJCAxIGNhcGFjaXR5IGFmdGVyIHJvdGF0aW9uKSBzdWdnZXN0cyByZXRhaW5pbmcgYHIgcmV0ZW5fZmFjdF9mdW4oZF90aF9jaF8yMiwgIm9ibGltaW4iKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF90aF9jaF8yMiwgIm9ibGltaW4iKSwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIGFmdGVyIHJldGVudGlvbjogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3RoX2NoXzIyX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdGhfY2hfMjIpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdGhfY2hfMjJfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IFNlZSA0LWZhY3RvciBzb2x1dGlvbiwgYWJvdmUuCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdGhfY2hfMjJfYmljIDwtIFZTUyhkX3RoX2NoXzIyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF90aF9jaF8yMikpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3RoX2NoXzIyX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KaGVhdG1hcF9mdW4oZF90aF9jaF8yMiwgMywgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiBUSCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQ2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2UKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KY2x1c3Rlcl9mdW4oZF90aF9jaF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF90aF9jaF8yMiwgIm9ibGltaW4iKSwgcm90ID0gIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyB3aXRoaW4gcmVkdWNlZCBmYWN0b3Igc3BhY2U6IFRIIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZmEoZF90aF9jaF8yMiwgNCwgIm9ibGltaW4iKSRzY29yZXNbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ0aGFpbGFuZCIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgLXN1YmlkKSAlPiUKICBmdWxsX2pvaW4ocmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9EZXNrdG9wL1RFTVBfVEhBSUxBTkQvYmVldGxlc190aGFpbGFuZF9jaGlsZHJlbl90aWR5XzIwMTgtMDUtMDkuY3N2IikgJT4lIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlcikpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgZmFjdG9yKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRzY29yZSkpKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNlbGwgcGhvbmVzIiwgInJvY2tzIiwgImZsb3dlcnMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZXMiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNoYXJhY3RlciwgeSA9IE1lYW4sIHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyLCAKICAgICAgICAgICAgIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGd1aWRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLCBjb2xvciA9ICJibGFjayIpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzLCA0LWZhY3RvciBzb2x1dGlvbjogVEggQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICJGYWN0b3Igc2NvcmUiKQpgYGAKCgojIyBDSCBBZHVsdHM6IG5vdCB5ZXQgcnVuCgojIyBDSCBDaGlsZHJlbjogbm90IHlldCBydW4KCiMjIFZUIEFkdWx0cwoKIyMjIE1heGltYWwgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNywgZmlnLmFzcCA9IDAuNX0KaGVhdG1hcF9mdW4oZF92dF9hZF8yMiwgbWF4X2ZhY3RfZnVuKG5jb2woZF92dF9hZF8yMikpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWF4aW1hbCBzb2x1dGlvbjogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyA0IGZhY3RvcnMsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KaGVhdG1hcF9mdW4oZF92dF9hZF8yMiwgNCwgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIDQtZmFjdG9yIHNvbHV0aW9uOiBWVCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX3Z0X2FkXzIyLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3Z0X2FkXzIyLCByZXRlbl9mYWN0X2Z1bihkX3Z0X2FkXzIyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBWVCBBZHVsdHMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIEFsdGVybmF0aXZlIGZhY3RvciByZXRlbnRpb24gbWV0aG9kcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpkX3Z0X2FkXzIyX3BhcmFsbGVsIDwtIGZhLnBhcmFsbGVsKGRfdnRfYWRfMjIpCmBgYAoKUGFyYWxsZWwgYW5hbHlzaXMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdnRfYWRfMjJfcGFyYWxsZWwkbmZhY3RgIGZhY3RvcnM6IAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3RoX2NoXzIyLCAzLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgcGFyYWxsZWwgYW5hbHlzaXM6IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdnRfYWRfMjJfYmljIDwtIFZTUyhkX3Z0X2FkXzIyLCBuID0gbWF4X2ZhY3RfZnVuKG5jb2woZF92dF9hZF8yMikpLCByb3RhdGUgPSAib2JsaW1pbiIsIHBsb3QgPSBGKQpgYGAKCk1pbmltaXppbmcgQklDIHN1Z2dlc3RzIHJldGFpbmluZyBgciBkX3Z0X2FkXzIyX2JpYyR2c3Muc3RhdHMgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigibmZhY3QiKSAlPiUgZmlsdGVyKEJJQyA9PSBtaW4oQklDKSkgJT4lIHNlbGVjdChuZmFjdCkgJT4lIGFzLm51bWVyaWMoKWAgZmFjdG9yczogU2VlIDItZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3Z0X2FkXzIyLCByZXRlbl9mYWN0X2Z1bihkX3Z0X2FkXzIyLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVlQgQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIpCmBgYAoKIyMjIEF0dHJpYnV0aW9ucyB0byBjaGFyYWN0ZXJzCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOX0KZmEoZF92dF9hZF8yMiwgNCwgIm9ibGltaW4iKSRzY29yZXNbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IHBhc3RlKCJ2YW51YXR1Iiwgc3ViaWQsIHNlcCA9ICJfIikpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCAtc3ViaWQpICU+JQogIGZ1bGxfam9pbihyZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0Rlc2t0b3AvVEVNUF9WQU5VQVRVL2JlZXRsZXNfdmFudWF0dV9hZHVsdHNfdGlkeV8yMDE4LTA1LTA5LmNzdiIpICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZ3N1YigiY3JpY2tldHMiLCAiYmVldGxlcyIsIGNoYXJhY3RlciksCiAgICAgICAgIGNoYXJhY3RlciA9IGdzdWIoImJlZXRsZXMiLCAiYmVldGxlcyoiLCBjaGFyYWN0ZXIpKSAlPiUKICBncm91cF9ieShjaGFyYWN0ZXIsIGZhY3RvcikgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kc2NvcmUpKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjZWxsIHBob25lcyIsICJyb2NrcyIsICJmbG93ZXJzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGVzKiIsICJjaGlja2VucyIsICJtaWNlIiwgImRvZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIiwgInBpZ3MiLCAiZ2hvc3RzIiwgIkdvZCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gTWVhbiwgeW1pbiA9IExvd2VyLCB5bWF4ID0gVXBwZXIsIAogICAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvcikgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoZ3VpZGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNhNmNlZTMiLCAiIzFmNzhiNCIsICIjYjJkZjhhIiwgIiMzM2EwMmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjZmI5YTk5IiwgIiNlMzFhMWMiLCAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2IxNTkyOCIsICIjY2FiMmQ2IiwgIiM2YTNkOWEiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSwgY29sb3IgPSAiYmxhY2siKSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcywgNC1mYWN0b3Igc29sdXRpb246IFZUIEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKCiMjIFZUIENoaWxkcmVuCgojIyMgTWF4aW1hbCBzdHJ1Y3R1cmUsIG9ibGltaW4gcm90YXRpb24KCmBgYHtyLCBmaWcud2lkdGggPSA3LCBmaWcuYXNwID0gMC41fQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIyLCBtYXhfZmFjdF9mdW4obmNvbChkX3Z0X2NoXzIyKSksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBtYXhpbWFsIHNvbHV0aW9uOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgNCBmYWN0b3JzLCBvYmxpbWluIHJvdGF0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmhlYXRtYXBfZnVuKGRfdnRfY2hfMjIsIDQsICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCA0LWZhY3RvciBzb2x1dGlvbjogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKIyMjIFJlZHVjZWQgc3RydWN0dXJlLCBvYmxpbWluIHJvdGF0aW9uCgpGb2xsb3dpbmcgb3VyIHVzdWFsIHByb3RvY29sIChlaWdlbnZhbHVlID4gMSwgc2hhcmVkIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlLCBkb21pbmFudCBmb3IgJFxnZXEkIDEgY2FwYWNpdHkgYWZ0ZXIgcm90YXRpb24pIHN1Z2dlc3RzIHJldGFpbmluZyBgciByZXRlbl9mYWN0X2Z1bihkX3Z0X2NoXzIyLCAib2JsaW1pbiIpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIyLCByZXRlbl9mYWN0X2Z1bihkX3Z0X2NoXzIyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgYWZ0ZXIgcmV0ZW50aW9uOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIyMgQWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CmRfdnRfY2hfMjJfcGFyYWxsZWwgPC0gZmEucGFyYWxsZWwoZF92dF9jaF8yMikKYGBgCgpQYXJhbGxlbCBhbmFseXNpcyBzdWdnZXN0cyByZXRhaW5pbmcgYHIgZF92dF9jaF8yMl9wYXJhbGxlbCRuZmFjdGAgZmFjdG9yczogU2VlIDMtZmFjdG9yIHNvbHV0aW9uLCBhYm92ZS4KCmBgYHtyLCBpbmNsdWRlID0gRn0KZF92dF9jaF8yMl9iaWMgPC0gVlNTKGRfdnRfY2hfMjIsIG4gPSBtYXhfZmFjdF9mdW4obmNvbChkX3Z0X2NoXzIyKSksIHJvdGF0ZSA9ICJvYmxpbWluIiwgcGxvdCA9IEYpCmBgYAoKTWluaW1pemluZyBCSUMgc3VnZ2VzdHMgcmV0YWluaW5nIGByIGRfdnRfY2hfMjJfYmljJHZzcy5zdGF0cyAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJuZmFjdCIpICU+JSBmaWx0ZXIoQklDID09IG1pbihCSUMpKSAlPiUgc2VsZWN0KG5mYWN0KSAlPiUgYXMubnVtZXJpYygpYCBmYWN0b3JzOgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxfQpoZWF0bWFwX2Z1bihkX3Z0X2NoXzIyLCAyLCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgbWluaW1pemluZyBCSUM6IFZUIENoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQpgYGAKCiMjIyBDbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpjbHVzdGVyX2Z1bihkX3Z0X2NoXzIyLCByZXRlbl9mYWN0X2Z1bihkX3Z0X2NoXzIyLCAib2JsaW1pbiIpLCByb3QgPSAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIHdpdGhpbiByZWR1Y2VkIGZhY3RvciBzcGFjZTogVlQgQ2hpbGRyZW4iLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIikKYGBgCgojIyMgQXR0cmlidXRpb25zIHRvIGNoYXJhY3RlcnMKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC45fQpmYShkX3Z0X2NoXzIyLCA0LCAib2JsaW1pbiIpJHNjb3Jlc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgbXV0YXRlKHN1YmlkID0gcGFzdGUoInZhbnVhdHUiLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkgJT4lCiAgZnVsbF9qb2luKHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRGVza3RvcC9URU1QX1ZBTlVBVFUvYmVldGxlc192YW51YXR1X2NoaWxkcmVuX3RpZHlfMjAxOC0wNS0wOS5jc3YiKSAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGdzdWIoImNyaWNrZXRzIiwgImJlZXRsZXMiLCBjaGFyYWN0ZXIpLAogICAgICAgICBjaGFyYWN0ZXIgPSBnc3ViKCJiZWV0bGVzIiwgImJlZXRsZXMqIiwgY2hhcmFjdGVyKSkgJT4lCiAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBmYWN0b3IpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHNjb3JlKSkpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2VsbCBwaG9uZXMiLCAicm9ja3MiLCAiZmxvd2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlcyoiLCAiY2hpY2tlbnMiLCAibWljZSIsICJkb2dzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiIsICJwaWdzIiwgImdob3N0cyIsICJHb2QiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGNoYXJhY3RlciwgeSA9IE1lYW4sIHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyLCAKICAgICAgICAgICAgIGNvbG9yID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IpICsKICBnZW9tX3BvaW50cmFuZ2UoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKGd1aWRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgIiNmZGJmNmYiLCAiI2ZmN2YwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNiMTU5MjgiLCAiI2NhYjJkNiIsICIjNmEzZDlhIikpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEsIGNvbG9yID0gImJsYWNrIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMsIDQtZmFjdG9yIHNvbHV0aW9uOiBWVCBDaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIkZhY3RvciBzY29yZSIpCmBgYAoKIyMgQ29uZ3J1ZW5jZSBhY3Jvc3Mgc2l0ZXMgYW5kIGFnZSBncm91cHMKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMX0KY29uZzIyIDwtIGZhLmNvbmdydWVuY2UobGlzdCgKICBsb2FkaW5nc19mdW4oZF91c19hZF9waWxvdF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidXNfYWQiKSwKICBsb2FkaW5nc19mdW4oZF9naF9jaF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAiZ2hfY2giKSwKICBsb2FkaW5nc19mdW4oZF90aF9hZF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfYWQiKSwKICBsb2FkaW5nc19mdW4oZF90aF9jaF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfY2giKSwKICBsb2FkaW5nc19mdW4oZF92dF9hZF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfYWQiKSwKICBsb2FkaW5nc19mdW4oZF92dF9jaF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfY2giKSkpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImZhY3RvckEiKSAlPiUKICBnYXRoZXIoZmFjdG9yQiwgY29uZ3J1ZW5jZSwgLWZhY3RvckEpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJmYWN0b3IiKSksCiAgICAgICAgICAgIGZ1bnMoZmFjdG9yKC4sIGxldmVscyA9IGMoInVzX2FkX01SMSIsICJ1c19hZF9NUjIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNfYWRfTVIzIiwgInVzX2FkX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdoX2NoX01SMSIsICJnaF9jaF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnaF9jaF9NUjMiLCAiZ2hfY2hfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhfYWRfTVIxIiwgInRoX2FkX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoX2FkX01SMyIsICJ0aF9hZF9NUjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aF9jaF9NUjEiLCAidGhfY2hfTVIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhfY2hfTVIzIiwgInRoX2NoX01SNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZ0X2FkX01SMSIsICJ2dF9hZF9NUjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2dF9hZF9NUjMiLCAidnRfYWRfTVI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidnRfY2hfTVIxIiwgInZ0X2NoX01SMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZ0X2NoX01SMyIsICJ2dF9jaF9NUjQiKSkpKQoKZ2dwbG90KGNvbmcyMiwgYWVzKHggPSBmYWN0b3JBLCB5ID0gZmFjdG9yQiwKICAgICAgICAgICBmaWxsID0gY29uZ3J1ZW5jZSwgbGFiZWwgPSByb3VuZChjb25ncnVlbmNlLCAyKSkpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV90ZXh0KHNpemUgPSAyKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gNC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gOC41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMTIuNSwgbHR5ID0gMiwgc2l6ZSA9IDAuNSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDE2LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAyMC41LCBsdHkgPSAyLCBzaXplID0gMC41KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMjQuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDQuNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDguNSwgbHR5ID0gMSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDEyLjUsIGx0eSA9IDIsIHNpemUgPSAwLjUpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxNi41LCBsdHkgPSAxLCBzaXplID0gMC41KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMjAuNSwgbHR5ID0gMiwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDI0LjUsIGx0eSA9IDEsIHNpemUgPSAwLjUpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkR3kiLCBsaW1pdHMgPSBjKC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDMwKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSkpICsKICBsYWJzKHRpdGxlID0gIkNvbmdydWVuY2UgYmV0d2VlbiA0LWZhY3RvciBzb2x1dGlvbnMgYWNyb3NzIHNhbXBsZXMiLAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nICdhZGQgYW5kIHN1YnRyYWN0IG51bWJlcnMnOyBhZnRlciBvYmxpbWluIHJvdGF0aW9uIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LCBpbmNsdWRlID0gRn0KbG9hZGluZ3NfMjIgPC0gZGF0YS5mcmFtZSgKICBsb2FkaW5nc19mdW4oZF91c19hZF9waWxvdF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidXNfYWQiKSwKICBsb2FkaW5nc19mdW4oZF9naF9jaF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAiZ2hfY2giKSwKICBsb2FkaW5nc19mdW4oZF90aF9hZF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfYWQiKSwKICBsb2FkaW5nc19mdW4oZF90aF9jaF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidGhfY2giKSwKICBsb2FkaW5nc19mdW4oZF92dF9hZF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfYWQiKSwKICBsb2FkaW5nc19mdW4oZF92dF9jaF8yMiwgbl9mYWN0b3JzID0gNCwgbGFiZWwgPSAidnRfY2giKSkgJT4lCiAgIyByZW5hbWUoInVzX2FkX0JPRFkiID0gdXNfYWRfTVIxLCAidXNfYWRfSEVBUlQiID0gdXNfYWRfTVIyLAogICMgICAgICAgICJ1c19hZF9NSU5EIiA9IHVzX2FkX01SMywgInVzX2FkX2FuZ2VyIiA9IHVzX2FkX01SNCwKICAjICAgICAgICAiZ2hfY2hfQk9EWUhFQVJUIiA9IGdoX2NoX01SMSwgImdoX2NoX01JTkRIRUFSVCIgPSBnaF9jaF9NUjIsCiAgIyAgICAgICAgImdoX2NoX3ByYXllciIgPSBnaF9jaF9NUjMsICJnaF9jaF9zaHluZXNzIiA9IGdoX2NoX01SNCwKICAjICAgICAgICAidGhfYWRfSEVBUlQiID0gdGhfYWRfTVIxLCAidGhfYWRfQk9EWSIgPSB0aF9hZF9NUjIsCiAgIyAgICAgICAgInRoX2FkX01JTkQiID0gdGhfYWRfTVIzLCAidGhfYWRfY2hvaWNlIiA9IHRoX2FkX01SNCwKICAjICAgICAgICAidGhfY2hfQk9EWSIgPSB0aF9jaF9NUjEsICJ0aF9jaF9NSU5EIiA9IHRoX2NoX01SMiwKICAjICAgICAgICAidGhfY2hfSEVBUlQxIiA9IHRoX2NoX01SMywgInRoX2NoX0hFQVJUMiIgPSB0aF9jaF9NUjQsCiAgIyAgICAgICAgInZ0X2FkX01JTkQiID0gdnRfYWRfTVIxLCAidnRfYWRfQk9EWSIgPSB2dF9hZF9NUjIsCiAgIyAgICAgICAgInZ0X2FkX0hFQVJUMiIgPSB2dF9hZF9NUjMsICJ2dF9hZF9IRUFSVDEiID0gdnRfYWRfTVI0LAogICMgICAgICAgICJ2dF9jaF9CT0RZIiA9IHZ0X2NoX01SMSwgInZ0X2NoX01JTkQiID0gdnRfY2hfTVIyLAogICMgICAgICAgICJ2dF9jaF9IRUFSVCIgPSB2dF9jaF9NUjMsICJ2dF9jaF9ub25lIiA9IHZ0X2NoX01SNCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGRvIGNsdXN0ZXIgYW5hbHlzaXMgb24gZmFjdG9yIGxvYWRpbmdzCmxvYWRpbmdzXzIyICU+JQogIHQoKSAlPiUKICBkaXN0KCkgJT4lCiAgaGNsdXN0KCkgJT4lCiAgYXMuZGVuZHJvZ3JhbSgpICU+JQogIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2U0MWExYyIsICIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiIzk4NGVhMyIpLCAKICAgICAgayA9IDQpICU+JSAKICAjIHNldCgibGFiZWxzX2NvbCIsIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLCAiIzMzYTAyYyIsCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2NhYjJkNiIsICIjNmEzZDlhIiwgIiNmZmZmOTkiLCAiI2IxNTkyOCIpLAogICMgICAgIGsgPSA0KSAlPiUKICBzZXQoImJyYW5jaGVzX2x3ZCIsIDAuNSkgJT4lCiAgYXMuZ2dkZW5kKCkgJT4lCiAgZ2dwbG90KGhvcml6ID0gRikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMiwgbHR5ID0gMiwgY29sb3IgPSAiYmxhY2siKSArCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKC0yLjUsIDMpKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyBvZiBmYWN0b3JzOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQoKIyBkbyBmYWN0b3IgYW5hbHlzaXMgb24gZmFjdG9yIGxvYWRpbmdzCmhlYXRtYXBfZnVuKGxvYWRpbmdzXzIyLCByZXRlbl9mYWN0X2Z1bihsb2FkaW5nc18yMiwgIm9ibGltaW4iKSwgIm9ibGltaW4iKQojIGZhLnBhcmFsbGVsKGxvYWRpbmdzXzIyKQpoZWF0bWFwX2Z1bihsb2FkaW5nc18yMiwgNCwgIm9ibGltaW4iKQoKIyBkbyBjbHVzdGVyIGFuYWx5c2lzIG9uIGZhY3RvciBsb2FkaW5ncyBhZnRlciBmYWN0b3IgYW5hbHlzaXMKZmEobG9hZGluZ3NfMjIsIHJldGVuX2ZhY3RfZnVuKGxvYWRpbmdzXzIyLCAib2JsaW1pbiIpLCAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGRpc3QoKSAlPiUKICBoY2x1c3QoKSAlPiUKICBhcy5kZW5kcm9ncmFtKCkgJT4lCiAgc2V0KCJsYWJlbHNfY29sIiwgdmFsdWUgPSBjKCIjYTZjZWUzIiwgIiMxZjc4YjQiLCAiI2IyZGY4YSIsICIjMzNhMDJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNmYjlhOTkiLCAiI2UzMWExYyIsICIjZmRiZjZmIiwgIiNmZjdmMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNjYWIyZDYiLCAiIzZhM2Q5YSIsICIjZmZmZjk5IiwgIiNiMTU5MjgiKSwKICAgICAgayA9IDQpICU+JQogIHNldCgiYnJhbmNoZXNfbHdkIiwgMC41KSAlPiUKICBhcy5nZ2RlbmQoKSAlPiUKICBnZ3Bsb3QoaG9yaXogPSBGKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAyLCBsdHkgPSAyLCBjb2xvciA9ICJibGFjayIpICsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoLTIsIDIpKSArCiAgbGFicyh0aXRsZSA9ICJIaWVyYXJjaGljYWwgY2x1c3RlcmluZyBvZiBmYWN0b3JzOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iKQpgYGAKCiMjIE1hc3RlciBFRkEKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZF9hbGxfMjIgPC0gZF91c19hZF9waWxvdF8yMiAlPiUKICBiaW5kX3Jvd3MoZF9naF9jaF8yMikgJT4lCiAgYmluZF9yb3dzKGRfdGhfYWRfMjIpICU+JQogIGJpbmRfcm93cyhkX3RoX2NoXzIyKSAlPiUKICBiaW5kX3Jvd3MoZF92dF9hZF8yMikgJT4lCiAgYmluZF9yb3dzKGRfdnRfY2hfMjIpCgpoZWF0bWFwX2Z1bihkX2FsbF8yMiwgcmV0ZW5fZmFjdF9mdW4oZF9hbGxfMjIsICJvYmxpbWluIiksICJvYmxpbWluIikgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIGxvYWRpbmdzLCBhZnRlciByZXRlbnRpb246IEFsbCBzYW1wbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQoKIyBmYS5wYXJhbGxlbChkX2FsbF8yMikKCmhlYXRtYXBfZnVuKGRfYWxsXzIyLCA0LCAib2JsaW1pbiIpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBsb2FkaW5ncywgcGFyYWxsZWwgYW5hbHlzaXM6IEFsbCBzYW1wbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyAnYWRkIGFuZCBzdWJ0cmFjdCBudW1iZXJzJzsgYWZ0ZXIgb2JsaW1pbiByb3RhdGlvbiIsCiAgICAgICB4ID0gIiIsIHkgPSAiIiwgZmlsbCA9ICIiKQoKIyBWU1MoZF9hbGxfMjIpCgpoZWF0bWFwX2Z1bihkX2FsbF8yMiwgMywgIm9ibGltaW4iKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3IgbG9hZGluZ3MsIG1pbmltaXppbmcgQklDOiBBbGwgc2FtcGxlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgJ2FkZCBhbmQgc3VidHJhY3QgbnVtYmVycyc7IGFmdGVyIG9ibGltaW4gcm90YXRpb24iLAogICAgICAgeCA9ICIiLCB5ID0gIiIsIGZpbGwgPSAiIikKYGBgCgojIERlbW9ncmFwaGljcwoKYGBge3IsIGluY2x1ZGUgPSBGfQpwYXN0ZTAoIlVTIGFkdWx0cyAocGlsb3QpOiAiLCBkX3VzX2FkX3BpbG90XzIzICU+JSBucm93KCkpCnBhc3RlMCgiR0ggY2hpbGRyZW46ICIsIGRfZ2hfY2hfMjMgJT4lIG5yb3coKSkKcGFzdGUwKCJUSCBhZHVsdHM6ICIsIGRfdGhfYWRfMjMgJT4lIG5yb3coKSkKcGFzdGUwKCJUSCBhZHVsdHM6ICIsIGRfdGhfY2hfMjMgJT4lIG5yb3coKSkKcGFzdGUwKCJWVCBhZHVsdHM6ICIsIGRfdnRfYWRfMjMgJT4lIG5yb3coKSkKcGFzdGUwKCJWVCBhZHVsdHM6ICIsIGRfdnRfY2hfMjMgJT4lIG5yb3coKSkKYGBgCg==